package studystat;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Een conditie waarvoor de gebruiker binnen een bepaalde duur een bepaald aantal uren moet
 * besteedt hebben aan een activiteit
 * @see Conditie
 */
public class UrenConditie extends Conditie {
	
	/**
	 * Velden
	 */
	// De duur waarin de conditie moet zijn voltooid, in minuten
	private long duurConditie;
	// Hoelang de gebruiker met de activiteit moet bezig geweest zijn, in minuten
	private long duurActi;

	/**
	 * Maak een nieuwe urenconditie aan
	 * @param naam	De naam van de conditie
	 * @param duurConditie De duur waarin de conditie moet zijn voltooid, in minuten
	 * @param duurActi	Hoelang de gebruiker met de activiteit moet bezig geweest zijn, in minuten
	 */
	public UrenConditie(String naam, long duurConditie, long duurActi) {
		super(naam);
		this.setDuurConditie(duurConditie);
		this.setDuurActi(duurActi);
	}

	/**
	 * Maak een nieuwe urenconditie aan
	 * @param naam	De naam van de conditie
	 * @param samenvatting	Een samenvatting van de conditie
	 * @param duurConditie De duur waarin de conditie moet zijn voltooid, in minuten
	 * @param duurActi	Hoelang de gebruiker met de activiteit moet bezig geweest zijn, in minuten
	 * @see Conditie
	 */
	public UrenConditie(String naam, String samenvatting, long duurConditie, long duurActi) {
		super(naam, samenvatting);
		this.setDuurConditie(duurConditie);
		this.setDuurActi(duurActi);
	}

	/* (non-Javadoc)
	 * @see studystat.Conditie#isVoldaan(java.util.List)
	 */
	@Override
	public boolean isVoldaan(List<Activiteit> activiteiten) {
		
		// Haal de relevante activiteiten uit de lijst
		List<Activiteit> activiteitenBinnenDuur = new ArrayList<Activiteit>();
		Date lastActi = activiteiten.get(activiteiten.size() -1).getStopTijd();
		for(Activiteit acti : activiteiten) {
			Date beginConditie = new Date(lastActi.getTime() - (60000*getDuurConditie())); // De datum van waar de relevante activiteiten ten minste beginnen
			Date beginActi = acti.getStartTijd();
			if(beginActi.after(beginConditie)) {
				activiteitenBinnenDuur.add(acti);
			}
		}
		
		// Kijk hoe lang de gebruiker is bezig geweest met de activiteit
		long duurBezig = 0;
		for(Activiteit actiBinnenDuur : activiteitenBinnenDuur) {
			duurBezig += actiBinnenDuur.getDuur();
		}
		
		// Kijk of dit lang genoeg is en return het antwoord
		boolean isVoldaan = false;
		if(duurBezig >= getDuurActi()) {
			isVoldaan = true;
		}
		return isVoldaan;
	}

	/**
	 * @return De duur waarin de conditie moet zijn voltooid, in minuten
	 */
	public long getDuurConditie() {
		return duurConditie;
	}

	/**
	 * @param duurConditie De duur waarin de conditie moet zijn voltooid, in minuten
	 */
	public void setDuurConditie(long duurConditie) {
		this.duurConditie = duurConditie;
	}

	/**
	 * @return Hoelang de gebruiker met de activiteit moet bezig geweest zijn, in minuten
	 */
	public long getDuurActi() {
		return duurActi;
	}

	/**
	 * @param duurActi Hoelang de gebruiker met de activiteit moet bezig geweest zijn, in minuten
	 */
	public void setDuurActi(long duurActi) {
		this.duurActi = duurActi;
	}
	
	public boolean isVoldaan(long tijdGedaan){
		boolean result = false;
		if(duurActi <= tijdGedaan ){
			result = true;
		}
		return result;
	}

}

